/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy. */
package cz.pecinovsky.english.pojj.adv_demo.byt_lednička;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IGameG;

import cz.pecinovsky.english.pojj.adv_framework.game_txt.IGame;

import cz.pecinovsky.english.pojj.adv_framework.scenario.TypeOfScenario;
import cz.pecinovsky.english.pojj.adv_framework.scenario.ScenarioStep;
import cz.pecinovsky.english.pojj.adv_framework.scenario.AScenarioManager;

import cz.pecinovsky.english.pojj.adv_framework.test_util._Test_101;
import cz.pecinovsky.english.pojj.adv_framework.test_util._Test_115;


import static  cz.pecinovsky.english.pojj.adv_framework.scenario.TypeOfStep.*;



/*******************************************************************************
 * Třída {@code SprávceLiterál} slouží jako správce scénářů,
 * které mají prověřit a/nebo demonstrovat správnou funkci plánované hry.
 * Jednotlive scénáře jsou iterovatelné posloupností kroků specifikovaných
 * instancemi třídy <code>ScenarioStep</code> z rámce, do nějž se hra začleňuje.
 * <p>
 * Tato třída poskytuje definice používající přímé zadávání textů.
 * Slouží pouze k demonstraci rozdílu oproti třídě (správci scénářů)
 * používající konstanty a nejsou u ní proto průběžně upravovány detaily tak,
 * aby s její pomocí byla hra doopravdy testovatelná.
 *
 * @author Rudolf PECINOVSKÝ
 * @version 3.00,  22.11.2006
 */
public class SprávceLiterál extends AScenarioManager
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================

    /** Třída, jejíž instance jsou zde spravovány. */
    private final static Class<? extends IGame> TŘÍDA = Hra_BytLednička.class;

    /** Jmeno autora dane tridy. */
    private static final String autor = "PECINOVSKÝ Rudolf";

    /** X-name autora/autorky scénáře. */
    private static final String xname = "XPECR999";


    /***************************************************************************
     * Konstruktor plnohodnotné instance třídy {@link ScenarioStep}
     * vyžaduje následující parametry:
     *      String   příkaz;    //Příkaz realizující tetno krok scénáře
     *      String   zpráva;    //Zpráva vypsaná po zadání příkazu
     *      String   prostor;   //Prostor, v něž skončí hráč po zadání příkazu
     *      String[] východy;   //Aktuální východy z aktuálního prostoru
     *      String[] objekty;   //Objekty vyskytující se v daném prostoru
     *      String[] batoh;     //Aktuální obsah batohu
     *      TypeOfStep typTestu;  //Typ daného kroku testu
     */


    /***************************************************************************
     * Základní scénář popisující možný úspěšný průběh hry.
     */
    private static final ScenarioStep[] základní =
    {
        new ScenarioStep( "", //Název prvního příkazu musí být prázdný řetězec
            "Vítáme vás ve služebním bytě. Jistě máte hlad." +
          "\nNajděte v bytě ledničku - tam vás čeká svačina." +
        "\n\nNacházíte se v místnosti: Předsíň" +
          "\nMůžete se přesunout do místností: Ložnice, Obývák, Koupelna" +
          "\nV místnosti se nachází: Botník, Deštník" +
          "\nMáte v držení předměty:",

            "Předsíň",
            new String[] { "Ložnice", "Obývák", "Koupelna" },
            new String[] { "Botník", "Deštník" },
            new String[] {},
            tsSTART ),

        new ScenarioStep( "jdi koupelna",
            "Přesunul(a) jste se do místnosti: Koupelna" +
        "\n\nNacházíte se v místnosti: Koupelna" +
          "\nMůžete se přesunout do místností: Předsíň" +
          "\nV místnosti se nachází: Brýle, Umyvadlo, Časopis" +
          "\nMáte v držení předměty:",

            "Koupelna",
            new String[] { "Předsíň" },
            new String[] { "Brýle", "Umyvadlo", "Časopis" },
            new String[] {},
            tsMOVE ),

        new ScenarioStep( "vezmi brýle",
            "Vzal(a) jste předmět: Brýle" +
        "\n\nNacházíte se v místnosti: Koupelna" +
          "\nMůžete se přesunout do místností: Předsíň" +
          "\nV místnosti se nachází: Umyvadlo, Časopis" +
          "\nMáte v držení předměty: Brýle",

            "Koupelna",
            new String[] { "Předsíň" },
            new String[] { "Umyvadlo", "Časopis" },
            new String[] { "Brýle" },
            tsPICK_UP ),

        new ScenarioStep( "vezmi časopis",
            "Vzal(a) jste předmět: Časopis" +
        "\n\nNacházíte se v místnosti: Koupelna" +
          "\nMůžete se přesunout do místností: Předsíň" +
          "\nV místnosti se nachází: Umyvadlo" +
          "\nMáte v držení předměty: Brýle, Časopis",

            "Koupelna",
            new String[] { "Předsíň" },
            new String[] { "Umyvadlo" },
            new String[] { "Brýle", "Časopis" },
            tsPICK_UP ),

        new ScenarioStep( "jdi předsíň",
            "Přesunul(a) jste se do místnosti: Předsíň" +
        "\n\nNacházíte se v místnosti: Předsíň" +
          "\nMůžete se přesunout do místností: Ložnice, Obývák, Koupelna" +
          "\nV místnosti se nachází: Botník, Deštník" +
          "\nMáte v držení předměty: Brýle, Časopis",

            "Předsíň",
            new String[] { "Ložnice", "Obývák", "Koupelna" },
            new String[] { "Botník", "Deštník" },
            new String[] { "Brýle", "Časopis" },
            tsMOVE ),

        new ScenarioStep( "jdi obývák",
            "Přesunul(a) jste se do místnosti: Obývák" +
        "\n\nNacházíte se v místnosti: Obývák" +
          "\nMůžete se přesunout do místností: Kuchyň, Předsíň" +
          "\nV místnosti se nachází: Televize" +
          "\nMáte v držení předměty: Brýle, Časopis",

            "Obývák",
            new String[] { "Kuchyň", "Předsíň" },
            new String[] { "Televize" },
            new String[] { "Brýle", "Časopis" },
            tsMOVE ),

        new ScenarioStep( "jdi kuchyň",
            "Přesunul(a) jste se do místnosti: Kuchyň" +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička, Papír" +
          "\nMáte v držení předměty: Brýle, Časopis",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička", "Papír" },
            new String[] { "Brýle", "Časopis" },
            tsMOVE ),

        new ScenarioStep( "otevři lednička",
            "Lednička nejde otevřít. Na ledničce leží nějaký popsaný papír." +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička, Papír" +
          "\nMáte v držení předměty: Brýle, Časopis",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička", "Papír" },
            new String[] { "Brýle", "Časopis" },
            tsNON_STANDARD ),

        new ScenarioStep( "vezmi papír",
            "Zadaný předmět nemůžete vzít, máte už obě ruce plné." +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička, Papír" +
          "\nMáte v držení předměty: Brýle, Časopis",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička", "Papír" },
            new String[] { "Brýle", "Časopis" },
            tsBAG_FULL ),

        new ScenarioStep( "polož časopis",
            "Položil(a) jste předmět: Časopis" +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička, Papír, Časopis" +
          "\nMáte v držení předměty: Brýle",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička", "Papír", "Časopis" },
            new String[] { "Brýle" },
            tsPUT_DOWN ),

        new ScenarioStep( "vezmi papír",
            "Vzal(a) jste předmět: Papír" +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička, Časopis" +
          "\nMáte v držení předměty: Brýle, Papír",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička", "Časopis" },
            new String[] { "Brýle", "Papír" },
            tsPICK_UP ),

        new ScenarioStep( "přečti papír",
            "Rozhodl(a) jste se přečíst vzkaz na papíře." +
          "\nJe ale psán příliš malým písmem, které je rozmazané" +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička, Časopis" +
          "\nMáte v držení předměty: Brýle, Papír",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička", "Časopis" },
            new String[] { "Brýle", "Papír" },
            tsNON_STANDARD ),

        new ScenarioStep( "nasaď brýle",
            "Nasadil(a) jste si brýle." +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička, Časopis" +
          "\nMáte v držení předměty: Papír",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička", "Časopis" },
            new String[] { "Papír" },
            tsNON_STANDARD ),

        new ScenarioStep( "přečti papír",
            "Na papíru je napsáno:" +
          "\nLednička stojí nakřivo, a proto jde špatně otevírat." +
          "\nBudete-li mít problémy, něčím ji podložte." +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička, Časopis" +
          "\nMáte v držení předměty: Papír",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička", "Časopis" },
            new String[] { "Papír" },
            tsNON_STANDARD ),

        new ScenarioStep( "vezmi časopis",
            "Vzal(a) jste předmět: Časopis" +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička" +
          "\nMáte v držení předměty: Papír, Časopis",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička" },
            new String[] { "Časopis", "Papír" },
            tsPICK_UP ),

        new ScenarioStep( "podlož lednička časopis",
            "Rozhodl(a) jste se podložit předmět lednička předmětem časopis." +
          "\nBohužel máte obě ruce plné a nemáte ji čím nadzvednout." +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička" +
          "\nMáte v držení předměty: Papír, Časopis",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička" },
            new String[] { "Časopis", "Papír" },
            tsNON_STANDARD ),

        new ScenarioStep( "polož papír",
            "Položil(a) jste předmět: Papír" +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička, Papír" +
          "\nMáte v držení předměty: Časopis",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička", "Papír" },
            new String[] { "Časopis" },
            tsPUT_DOWN ),

        new ScenarioStep( "podlož lednička časopis",
            "Rozhodl(a) jste se podložit předmět lednička předmětem časopis." +
          "\nLednička je úspěšně podložena - nyní by již měla jít otevřít." +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička, Papír" +
          "\nMáte v držení předměty:",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička", "Papír" },
            new String[] {},
            tsNON_STANDARD ),

        new ScenarioStep( "otevři lednička",
            "Úspěšně jste otevřel(a) ledničku." +
        "\n\nNacházíte se v místnosti: Lednička" +
          "\nMůžete se přesunout do místností:" +
          "\nV místnosti se nachází: Pivo, Pivo, Pivo, " +
                                    "Salám, Houska, Víno, Rum" +
          "\nMáte v držení předměty:",

          "Lednička",
          new String[] {},
          new String[] { "Pivo", "Pivo", "Pivo",
                       "Salám", "Houska", "Víno", "Rum" },
          new String[] {},
          tsNON_STANDARD ),

        new ScenarioStep( "vezmi pivo",
            "Pokoušíte si vzít z inteligentní ledničky Pivo." +
          "\nToto je inteligentní lednička, která neumožňuje " +
          "\npodávání alkoholických nápojů mladistvým." +
          "\nKolik je vám let?",

            "Lednička",
            new String[] {},
            new String[] { "Pivo", "Pivo", "Pivo",
                           "Salám", "Houska", "Víno", "Rum" },
            new String[] {},
            tsUNMOVABLE ),

        new ScenarioStep( "20",
            "V kterém roce jste se narodil(a)?\n",

            "Lednička",
            new String[] {},
            new String[] { "Pivo", "Pivo", "Pivo",
                           "Salám", "Houska", "Víno", "Rum" },
            new String[] {},
            tsDIALOG ),

        new ScenarioStep( "1990",
            "Věřím vám a předávám vám požadovaný nápoj." +
          "\nOdebral(a) jste z ledničky: Pivo" +
          "\nDobrou chuť. Nezapomeňte zavřít ledničku." +
        "\n\nNacházíte se v místnosti: Lednička" +
          "\nMůžete se přesunout do místností:" +
          "\nV místnosti se nachází: Pivo, Pivo," +
                                    "Salám, Houska, Víno, Rum" +
          "\nMáte v držení předměty: Pivo",

            "Lednička",
            new String[] {},
            new String[] { "Pivo", "Pivo", "Salám", "Houska", "Víno", "Rum" },
            new String[] { "Pivo" },
            tsDIALOG ),

        new ScenarioStep( "zavři lednička",
            "Úspěšně jste zavřel(a) ledničku." +
        "\n\nNacházíte se v místnosti: Kuchyň" +
          "\nMůžete se přesunout do místností: Obývák, Ložnice" +
          "\nV místnosti se nachází: Lednička, Papír" +
          "\nMáte v držení předměty: Pivo",

            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička", "Papír" },
            new String[] { "Pivo" },
            tsNON_STANDARD ),

        new ScenarioStep( "konec",
            "Konec hry. \nDěkujeme, že jste zkusil(a) naši hru.",
            "Kuchyň",
            new String[] { "Obývák", "Ložnice" },
            new String[] { "Lednička", "Papír" },
            new String[] { "Pivo" },
            tsEND )
    };

    static { ScenarioStep.setIndex(1); }

    /***************************************************************************
     * Základní chybový scénář definující reakce
     * na povinnou sadu chybových stavů.
     */
    private static final ScenarioStep[] chybový =
    {
        new ScenarioStep( "", //První příkaz musí být povinně prázdný řetězec
            "Vítáme vás ve služebním bytě. Jistě máte hlad." +
          "\nNajděte v bytě ledničku - tam vás čeká svačina." +
        "\n\nNacházíte se v místnosti: Předsíň" +
          "\nMůžete se přesunout do místností: Ložnice, Obývák, Koupelna" +
          "\nV místnosti se nachází: Botník, Deštník" +
          "\nMáte v držení předměty:",

            "Předsíň",
            new String[] { "Ložnice", "Obývák", "Koupelna" },
            new String[] { "Botník", "Deštník" },
            new String[] {},
            tsSTART ),

        new ScenarioStep( "maso",
            "Tento příkaz neznám." +
          "\nChcete-li poradit, zadejte příkaz ?" +
        "\n\nNacházíte se v místnosti: Předsíň" +
          "\nMůžete se přesunout do místností: Ložnice, Obývák, Koupelna" +
          "\nV místnosti se nachází: Botník, Deštník" +
          "\nMáte v držení předměty:",

            "Předsíň",
            new String[] { "Ložnice", "Obývák", "Koupelna" },
            new String[] { "Botník", "Deštník" },
            new String[] {},
            tsUNKNOWN ),

        new ScenarioStep( "",
            "Zadal(a) jste prázdný příkaz." +
        "\n\nNacházíte se v místnosti: Předsíň" +
          "\nMůžete se přesunout do místností: Ložnice, Obývák, Koupelna" +
          "\nV místnosti se nachází: Botník, Deštník" +
          "\nMáte v držení předměty:",

            "Předsíň",
            new String[] { "Ložnice", "Obývák", "Koupelna" },
            new String[] { "Botník", "Deštník" },
            new String[] {},
            tsEMPTY ),

        new ScenarioStep( "vezmi deštník",
            "Vzal(a) jste předmět: Deštník" +
        "\n\nNacházíte se v místnosti: Předsíň" +
          "\nMůžete se přesunout do místností: Ložnice, Obývák, Koupelna" +
          "\nV místnosti se nachází: Botník" +
          "\nMáte v držení předměty: Deštník",

            "Předsíň",
            new String[] { "Ložnice", "Obývák", "Koupelna" },
            new String[] { "Botník" },
            new String[] { "Deštník" },
            tsPICK_UP ),

        new ScenarioStep( "jdi koupelna",
            "Přesunul(a) jste se do místnosti: Koupelna" +
        "\n\nNacházíte se v místnosti: Koupelna" +
          "\nMůžete se přesunout do místností: Předsíň" +
          "\nV místnosti se nachází: Brýle, Umyvadlo, Časopis" +
          "\nMáte v držení předměty: Deštník",

            "Koupelna",
            new String[] { "Předsíň" },
            new String[] { "Brýle", "Umyvadlo", "Časopis" },
            new String[] { "Deštník" },
            tsMOVE ),

        new ScenarioStep( "jdi záchod",
            "Do zadané místnosti se odsud nedá přejít." +
        "\n\nNacházíte se v místnosti: Koupelna" +
          "\nMůžete se přesunout do místností: Předsíň" +
          "\nV místnosti se nachází: Brýle, Umyvadlo, Časopis" +
          "\nMáte v držení předměty: Deštník",

            "Koupelna",
            new String[] { "Předsíň" },
            new String[] { "Brýle", "Umyvadlo", "Časopis" },
            new String[] { "Deštník" },
            tsBAD_NEIGHBOR ),

        new ScenarioStep( "vezmi koupelna",
            "Zadaný předmět v místnosti není: Koupelna" +
        "\n\nNacházíte se v místnosti: Koupelna" +
          "\nMůžete se přesunout do místností: Předsíň" +
          "\nV místnosti se nachází: Brýle, Umyvadlo, Časopis" +
          "\nMáte v držení předměty: Deštník",

            "Koupelna",
            new String[] { "Předsíň" },
            new String[] { "Brýle", "Umyvadlo", "Časopis" },
            new String[] { "Deštník" },
            tsBAD_OBJECT ),

        new ScenarioStep( "vezmi umyvadlo",
            "Zadaný předmět nejde zvednout: Umyvadlo" +
        "\n\nNacházíte se v místnosti: Koupelna" +
          "\nMůžete se přesunout do místností: Předsíň" +
          "\nV místnosti se nachází: Brýle, Umyvadlo, Časopis" +
          "\nMáte v držení předměty: Deštník",

            "Koupelna",
            new String[] { "Předsíň" },
            new String[] { "Brýle", "Umyvadlo", "Časopis" },
            new String[] { "Deštník" },
            tsUNMOVABLE ),

        new ScenarioStep( "polož papír",
            "Předmět není v batohu: Papír" +
        "\n\nNacházíte se v místnosti: Koupelna" +
          "\nMůžete se přesunout do místností: Předsíň" +
          "\nV místnosti se nachází: Brýle, Umyvadlo, Časopis" +
          "\nMáte v držení předměty: Deštník",

            "Koupelna",
            new String[] { "Předsíň" },
            new String[] { "Brýle", "Umyvadlo", "Časopis" },
            new String[] { "Deštník" },
            tsNOT_IN_BAG ),

        new ScenarioStep( "vezmi brýle",
            "Vzal(a) jste předmět: Brýle" +
        "\n\nNacházíte se v místnosti: Koupelna" +
          "\nMůžete se přesunout do místností: Předsíň" +
          "\nV místnosti se nachází: Umyvadlo, Časopis" +
          "\nMáte v držení předměty: Deštník, Brýle",

            "Koupelna",
            new String[] { "Předsíň" },
            new String[] { "Umyvadlo", "Časopis" },
            new String[] { "Deštník", "Brýle" },
            tsPICK_UP ),

        new ScenarioStep( "vezmi Časopis",
            "Zadaný předmět nemůžete vzít, máte už obě ruce plné." +
        "\n\nNacházíte se v místnosti: Koupelna" +
          "\nMůžete se přesunout do místností: Předsíň" +
          "\nV místnosti se nachází: Umyvadlo, Časopis" +
          "\nMáte v držení předměty: Deštník, Brýle",

            "Koupelna",
            new String[] { "Předsíň" },
            new String[] { "Umyvadlo", "Časopis" },
            new String[] { "Deštník", "Brýle" },
            tsBAG_FULL ),

        new ScenarioStep("?",
            "\nPříkazy, které je možno v průběhu hry zadat:" +
            "\n============================================",
            //Text pokračuje vyjmenováním příkazů a jejich popisů
            //a končí standardním popisem aktuální situace

            "Koupelna",
            new String[] { "Předsíň" },
            new String[] { "Umyvadlo", "Časopis" },
            new String[] { "Deštník", "Brýle" },
            tsHELP ),

        new ScenarioStep( "konec",
            "Konec hry. \nDěkujeme, že jste zkusil(a) naši hru.",

            "Koupelna",
            new String[] { "Předsíň" },
            new String[] { "Umyvadlo", "Časopis" },
            new String[] { "Deštník", "Brýle" },
            tsEND ),
    };


    /***************************************************************************
     * Příkazy pro demonstrační scénář sloužící k analýze funkce
     * grafického uživatelského rozhraní.
     * Scénář má za úkol projít jeméně třemi místnostmi,
     * zvednout nejméně dva objekty a položit je v jiné místnosti,
     * než ve které je zvedal.
     * Příkazy pro demonstrační scénář neobsahuje úvodní prázdný příkaz,
     * ten si konstruktor scénáře doplní sám.
     */
    String[] demonstrační = {
             "jdi   koupelna",
             "vezmi brýle",
             "vezmi časopis",
             "jdi   předsíň",
             "jdi   obývák",
             "polož časopis",
             "polož brýle",
             "konec"
    };

    /** Jediná instance této třídy. Spravuje všechny scénáře sdružené hry. */
    private static final SprávceLiterál SS = new SprávceLiterál();



//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vrátí správce scénářů - jedinou instanci této třídy.
     *
     * @return Správce scénářů
     */
    public static SprávceLiterál getInstance()
    {
        return SS;
    }


    /***************************************************************************
     * Vytvoří instanci představující správce scénářů hry.
     */
    public SprávceLiterál()
    {
        super(autor, xname, TŘÍDA);

        addScenario("Základní",     TypeOfScenario.scHAPPY,     základní);
        addScenario("Chybový",      TypeOfScenario.scMISTAKES,  chybový);
        addScenario("Demo for GUI", demonstrační);
        seal();
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTOVACÍ METODY A TŘÍDY ==================================================

    /***************************************************************************
     * Základní test ověřující, jestli správce scénářů vyhovuje
     * zadným okrajovým podmínkám.
     */
    public static void testSprávceScénářů()
    {
        _Test_101 test = _Test_101.getInstance(SS);
        test.testScenarioManager();
    }


    /***************************************************************************
     * Testování funkce hry prováděné postupně
     * prostřednictvím všech scénářů daného správce
     */
    public static void prověrkaHry()
    {
        IGame     hra  = SS.getGame();
        _Test_101 test = _Test_101.getInstance(hra);
        test.testGame();
    }


    /***************************************************************************
     * Test ověřujícífunkci textové verze hry.
     */
    public static void testTXT()
    {
        IGame     hra  = SS.getGame();
        _Test_101 test = _Test_101.getInstance(hra);
        test.playGameByScenario(INDEX_GUI_TEST);
    }


    /***************************************************************************
     * Test demonstrující hraní hry na daném GUI.
     */
    public static void testGUI()
    {
        IGameG    hra  = (IGameG)SS.getGame();
        _Test_115 test = _Test_115.getInstance(hra);
        test.playGameByScenario(INDEX_GUI_TEST);
    }


    /** @param args Parametry příkazového řádku - nepoužívané. */
    public static void main( String[] args )
    {
        testTXT();
    }
}
